#pragma once

#include"load_balance.h"

// ip和port作为主键，host_info作为value的map
typedef __gnu_cxx::hash_map<uint64_t, load_balance*> Route_map;
typedef Route_map::iterator Route_map_it;


// 针对多组modid/cmdid和load_balance对应的map关系

// 目前的route_lb对象只有三个，每个udp server都会有一个route_map的关系


class route_lb{
public:
    route_lb(int id);

    // 根据modid和cmdid获取host信息的方法
    int get_host(int modid, int cmdid, lars::GetHostResponse &response);

    //根据Dns Service返回的结果更新自己的route_lb_map
    int update_host(int modid, int cmdid, lars::GetRouteResponse &response);

    // 将全部的load_balance重置为NEW状态 
    void reset_lb_status();

    // 根据agent给的消息上报host调用结果
    void report_host(lars::ReportRequest &request);
    
    // 根据agent发过来的消息，加载当前modid和cmdid下的全部host信息
    int get_route(int modid, int cmdid, lars::GetRouteResponse &response);

private:
    // 当前route_lb模块所管理的modid/cmdid和load_balance对应的map关系
    Route_map _route_lb_map;
    pthread_mutex_t _mutex; 

    // 当前的route_lb的编号，和udp server所一一对应
    int _id;    

};